`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////

module switchs(switclk, switrst, switchread, switchcs,switchaddr, switchrdata, switch_i);

    //时钟信号
    input switclk;
    //复位信号			        
    input switrst;	
    //这个是选择开关作为IO输入设备的信号		       
    input switchcs;	
    //开关的片选地址，00表示选择前16个开关的读取数据，10表示选择后8个开关的读取数据，前8个为0		       
    input[1:0] switchaddr;	
    //这个也是选择开关作为读取设备的信号	    
    input switchread;
    //我要送给CPU的，从拨码开关中读取的数
    output [15:0] switchrdata;
    //从板子上读取到的24位的数据	    
    input [23:0] switch_i;		
    //从拨码开关中读取的数值
    reg [23:0] switchrdata;

    always@(negedge switclk or posedge switrst) begin
        //复位
        if(switrst) begin
            switchrdata <= 0;
        end
        //如果我要用开关做输入
		else if(switchcs && switchread) begin
			if(switchaddr==2'b00)
				switchrdata[15:0] <= switch_i[15:0];  
			else if(switchaddr==2'b10)
				switchrdata[15:0] <= { 8'h00, switch_i[23:16] }; 
			else 
				switchrdata <= switchrdata;
        end
		else begin
            switchrdata <= switchrdata;
        end
    end
endmodule
